更新租赁商店系统的商店租赁状态

时间:2021-05-04 16:04:51

标签: sql-server tsql

我正在开发租赁商店管理系统,我有一个名为 shops 的表:

ID       int
shop_id  int
size     decimal(4, 1)
location nvarchar(50)
floor    nvarchar(10)
status   bit
date     date
app_user nvarchar(20)
archive  bit

shops 表包含一个状态列来显示其状态,如果存在有效合同,则此状态值取决于 contracts 表(这意味着合同未到期,例如合同的结束日期)合同大于当前日期)对于这家商店,状态将是 1 为租用,每个合同可能有多个商店,因此还有另一个名为 contracts_shops 的表将合同与商店的表连接起来。知道同一个商店可以有多个合同,例如:

<头>
contract_ID 商店 start_date end_date
1 1-2 10-05-2020 10-05-2021
2 1-2 11-05-2021 11-05-2022

我需要确保所有商店的状态都是正确的,因为如果商店的状态是租用的,用户就不能租用商店。我现在正在做什么,当有新合同时,我检查日期,如果合同开始日期等于当前日期,我将商店状态更新为出租。如果不是我让商店免费,在这种情况下,我创建了一个预定的工作,每天在特定时间检查 end_date 等于当前日期的所有合同,并使这些合同的所有商店状态免费:

UPDATE shops set status = 0 where shop_id in (select contracts_shops.shop_id from contracts 
INNER JOIN contracts_shops ON contracts_shops.contract_id=contracts.ID
where contracts.date_end = Cast(GETDATE() as date))

另一个检查所有 start_date 等于当前时间的合同并将这些合同的商店状态更改为租用:

UPDATE shops set status = 1 where shop_id in (select contracts_shops.shop_id from contracts 
INNER JOIN contracts_shops ON contracts_shops.contract_id=contracts.ID
where contracts.date_start = Cast(GETDATE() as date))

这是实现此目的的好方法吗??我可以做任何改进或进行任何更改以使其更可靠吗??

这是我的完整数据库脚本:

CREATE TABLE [dbo].[cheque_in](
[ID] [int] IDENTITY(1,1) NOT NULL,
[account_number] [int] NULL,
[cheque_number] [int] NOT NULL,
[cheque_value] [decimal](10, 2) NOT NULL,
[cheque_due_date] [date] NOT NULL,
[cheque_bank] [nvarchar](55) NULL,
[cheque_branch] [nvarchar](55) NULL,
[holder_name] [nvarchar](250) NULL,
[date] [date] NOT NULL,
[note] [nvarchar](max) NULL,
[pay_id] [int] NULL,
[app_user] [nvarchar](20) NULL,


CONSTRAINT [PK_cheque_in] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
/****** Object:  Table [dbo].[contracts]    Script Date: 04/05/2021 07:00:51 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[contracts](
[ID] [int] IDENTITY(1,1) NOT NULL,
[cust_id] [int] NOT NULL,
[duration] [int] NOT NULL,
[price] [decimal](10, 2) NOT NULL,
[tax] [decimal](10, 2) NULL,
[usage] [nvarchar](20) NOT NULL,
[rent_type] [nvarchar](10) NOT NULL,
[price2] [decimal](10, 2) NULL,
[note2] [nvarchar](max) NULL,
[date_start] [date] NOT NULL,
[date_end] [date] NOT NULL,
[note] [nvarchar](max) NULL,
[image] [varbinary](max) NULL,
[app_user] [nvarchar](20) NULL,
[archive] [bit] NOT NULL,


CONSTRAINT [PK_contracts] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

/****** Object:  Table [dbo].[contracts_shops]    Script Date: 04/05/2021 07:00:51 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[contracts_shops](
[ID] [int] IDENTITY(1,1) NOT NULL,
[contract_id] [int] NOT NULL,
[shop_id] [int] NOT NULL,
[date] [datetime] NOT NULL,


CONSTRAINT [PK_contracts_shops] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[customers]    Script Date: 04/05/2021 07:00:51 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[customers](
[ID] [int] IDENTITY(1,1) NOT NULL,
[cust_id] [int] NOT NULL,
[name] [nvarchar](50) NULL,
[nickname] [nvarchar](50) NULL,
[city] [nvarchar](50) NULL,
[phone1] [nvarchar](10) NULL,
[phone2] [nvarchar](10) NULL,
[phone3] [nvarchar](10) NULL,
[email] [nvarchar](50) NULL,
[image] [varbinary](max) NULL,
[date] [date] NULL,
[app_user] [nvarchar](20) NULL,
[archive] [bit] NULL,


CONSTRAINT [PK_customers] PRIMARY KEY CLUSTERED 
(
    [cust_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
/****** Object:  Table [dbo].[invoices]    Script Date: 04/05/2021 07:00:51 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[invoices](
[ID] [int] IDENTITY(1,1) NOT NULL,
[con_id] [int] NOT NULL,
[value] [decimal](10, 2) NOT NULL,
[due_date] [date] NULL,
[date] [date] NULL,


CONSTRAINT [PK_due_payments] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[payments]    Script Date: 04/05/2021 07:00:51 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[payments](
[ID] [int] IDENTITY(1,1) NOT NULL,
[inv_id] [int] NULL,
[note] [nvarchar](max) NULL,
[date] [date] NULL,
[app_user] [nvarchar](20) NULL,


CONSTRAINT [PK_invoices] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
/****** Object:  Table [dbo].[payments_details]    Script Date: 04/05/2021 07:00:51 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[payments_details](
[ID] [int] IDENTITY(1,1) NOT NULL,
[pay_id] [int] NOT NULL,
[value] [decimal](10, 2) NULL,
[method] [nvarchar](20) NULL,
[date] [date] NULL,


CONSTRAINT [PK_Payment_yearly_details] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[shops]    Script Date: 04/05/2021 07:00:51 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[shops](
[ID] [int] IDENTITY(1,1) NOT NULL,
[shop_id] [int] NOT NULL,
[size] [decimal](4, 1) NULL,
[location] [nvarchar](50) NULL,
[floor] [nvarchar](10) NULL,
[status] [bit] NULL,
[date] [date] NULL,
[app_user] [nvarchar](20) NULL,
[archive] [bit] NULL,


CONSTRAINT [PK_shops] PRIMARY KEY CLUSTERED 
(
    [shop_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[users]    Script Date: 04/05/2021 07:00:51 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[users](
[ID] [int] IDENTITY(1,1) NOT NULL,
[fname] [nvarchar](50) NOT NULL,
[lname] [nvarchar](50) NOT NULL,
[uname] [nvarchar](20) NOT NULL,
[pass] [nvarchar](20) NOT NULL,
[gender] [nvarchar](5) NOT NULL,
[type] [nvarchar](5) NOT NULL,
[date] [date] NULL,
[image] [varbinary](max) NULL,
[run_app] [bit] NULL,
[add_data] [bit] NULL,
[delete_data] [bit] NULL,
[edit_data] [bit] NULL,
[print_data] [bit] NULL,
[add_users] [bit] NULL,


CONSTRAINT [PK_users] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

这是我的数据库图: enter image description here

0 个答案:

没有答案