-
Notifications
You must be signed in to change notification settings - Fork 67
/
Table.sql
227 lines (204 loc) · 4.74 KB
/
Table.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
DROP VIEW product_sales_for_2016;
DROP VIEW products_above_average_price;
DROP TABLE Deliver_To;
DROP TABLE Contain;
DROP TABLE Payment;
DROP TABLE Manage;
DROP TABLE Save_to_Shopping_Cart;
DROP TABLE After_Sales_Service_At;
DROP TABLE Address;
DROP TABLE Orders;
DROP TABLE OrderItem;
DROP TABLE CreditCard;
DROP TABLE DebitCard;
DROP TABLE BankCard;
DROP TABLE Seller;
DROP TABLE Comments;
DROP TABLE Buyer;
DROP TABLE Users;
DROP TABLE Product;
DROP TABLE Store;
DROP TABLE ServicePoint;
DROP TABLE Brand;
-- Entity
CREATE TABLE Users
(
userid INT NOT NULL
,name VARCHAR(20)
,phoneNumber VARCHAR(20)
,PRIMARY KEY(userid)
);
CREATE TABLE Buyer
(
userid INT NOT NULL
,PRIMARY KEY(userid)
,FOREIGN KEY(userid) REFERENCES Users(userid)
);
CREATE TABLE Seller
(
userid INT NOT NULL
,PRIMARY KEY(userid)
,FOREIGN KEY(userid) REFERENCES Users(userid)
);
CREATE TABLE BankCard
(
cardNumber VARCHAR(25) NOT NULL
,expiryDate DATE
,bank VARCHAR(20)
,PRIMARY KEY(cardNumber)
);
CREATE TABLE
CreditCard
(
cardNumber VARCHAR(25) NOT NULL
,userid INT NOT NULL
,organization VARCHAR(20)
,PRIMARY KEY(cardNumber)
,FOREIGN KEY(cardNumber) REFERENCES BankCard(cardNumber)
,FOREIGN KEY(userid) REFERENCES Users(userid)
);
CREATE TABLE DebitCard
(
cardNumber VARCHAR(25) NOT NULL
,userid INT NOT NULL
,PRIMARY KEY(cardNumber)
,FOREIGN KEY(cardNumber) REFERENCES BankCard(cardNumber)
,FOREIGN KEY(userid) REFERENCES Users(userid)
);
CREATE TABLE Address
(
addrid INT NOT NULL
,userid INT NOT NULL
,name VARCHAR(50)
,contactPhoneNumber VARCHAR(20)
,province VARCHAR(100)
,city VARCHAR(100)
,streetaddr VARCHAR(100)
,postCode VARCHAR(12)
,PRIMARY KEY(addrid)
,FOREIGN KEY(userid) REFERENCES Users(userid)
);
CREATE TABLE Store
(
sid INT NOT NULL
,name VARCHAR(20)
,province VARCHAR(20)
,city VARCHAR(20)
,streetaddr VARCHAR(20)
,customerGrade INT
,startTime DATE
,PRIMARY KEY(sid)
);
CREATE TABLE Brand
(
brandName VARCHAR(20) NOT NULL
,PRIMARY KEY (brandName)
);
CREATE TABLE Product
(
pid INT NOT NULL
,sid INT NOT NULL
,brand VARCHAR(50) NOT NULL
,name VARCHAR(100)
,type VARCHAR(50)
,modelNumber VARCHAR(50)
,color VARCHAR(50)
,amount INT
,price INT
,PRIMARY KEY(pid)
,FOREIGN KEY(sid) REFERENCES Store(sid)
,FOREIGN KEY(brand) REFERENCES Brand(brandName)
);
CREATE TABLE OrderItem
(
itemid INT NOT NULL
,pid INT NOT NULL
,price INT
,creationTime DATE
,PRIMARY KEY(itemid)
,FOREIGN KEY(pid) REFERENCES Product(pid)
);
CREATE TABLE Orders
(
orderNumber INT NOT NULL
,paymentState VARCHAR(12)
,creationTime DATE
,totalAmount INT
,PRIMARY KEY (orderNumber)
);
CREATE TABLE Comments -- Weak Entity
(
creationTime DATE NOT NULL
,userid INT NOT NULL
,pid INT NOT NULL
,grade FLOAT
,content VARCHAR(500)
,PRIMARY KEY(creationTime,userid,pid)
,FOREIGN KEY(userid) REFERENCES Buyer(userid)
,FOREIGN KEY(pid) REFERENCES Product(pid)
);
CREATE TABLE ServicePoint
(
spid INT NOT NULL
,streetaddr VARCHAR(40)
,city VARCHAR(30)
,province VARCHAR(20)
,startTime VARCHAR(20)
,endTime VARCHAR(20)
,PRIMARY KEY(spid)
);
-- Relationship
CREATE TABLE Save_to_Shopping_Cart
(
userid INT NOT NULL
,pid INT NOT NULL
,addTime DATE
,quantity INT
,PRIMARY KEY (userid,pid)
,FOREIGN KEY(userid) REFERENCES Buyer(userid)
,FOREIGN KEY(pid) REFERENCES Product(pid)
);
CREATE TABLE Contain
(
orderNumber INT NOT NULL
,itemid INT NOT NULL
,quantity INT
,PRIMARY KEY (orderNumber,itemid)
,FOREIGN KEY(orderNumber) REFERENCES Orders(orderNumber)
,FOREIGN KEY(itemid) REFERENCES OrderItem(itemid)
);
CREATE TABLE Payment
(
orderNumber INT NOT NULL
,creditcardNumber VARCHAR(25) NOT NULL
,payTime DATE
,PRIMARY KEY(orderNumber,creditcardNumber)
,FOREIGN KEY(orderNumber) REFERENCES Orders(orderNumber)
,FOREIGN KEY(creditcardNumber) REFERENCES CreditCard(cardNumber)
);
CREATE TABLE Deliver_To
(
addrid INT NOT NULL
,orderNumber INT NOT NULL
,TimeDelivered DATE
,PRIMARY KEY(addrid,orderNumber)
,FOREIGN KEY(addrid) REFERENCES Address(addrid)
,FOREIGN KEY(orderNumber) REFERENCES Orders(orderNumber)
);
CREATE TABLE Manage
(
userid INT NOT NULL
,sid INT NOT NULL
,SetUpTime DATE
,PRIMARY KEY(userid,sid)
,FOREIGN KEY(userid) REFERENCES Seller(userid)
,FOREIGN KEY(sid) REFERENCES Store
);
CREATE TABLE After_Sales_Service_At
(
brandName VARCHAR(20) NOT NULL
,spid INT NOT NULL
,PRIMARY KEY(brandName, spid)
,FOREIGN KEY(brandName) REFERENCES Brand (brandName)
,FOREIGN KEY(spid) REFERENCES ServicePoint(spid)
);