我正在为我的网站建立一个数据库。我这里有一个架构:enrolin.in/download.png
网站简介:
它代表大学收集学生的数据。
现在我在数据库中所做的就是创建了一个UDT,其中存储了固定给学生的数据。和CST-存储每个新课程可以改变的数据。
我是数据库设计的新手,所以请看看数据库设计并告诉我可以改进的地方。我希望它是完美的,以便将来没有数据库的复杂/限制
备注:
不仅仅是一所大学。它就像一个不同的大学可以添加课程的平台。每个学院都有不同的课程,不同的科目等。可以有许多CST,可能是每个新课程的单独CST。另外,我不确定我存储课程数据的方式,我的意思是CST和UDT。每个学院都可以访问申请该学院课程的学生的数据,每个学生都可以访问他之前填写的表格数据,状态等数据。
提前致谢。如果有任何不清楚的地方,请在评论中提问。
更新: - 表格 - 表CST
CREATE TABLE CST (
cst_id int NOT NULL ,
rollno int NOT NULL ,
semester int NOT NULL ,
CONSTRAINT CST_pk PRIMARY KEY (cst_id)
);
- 表UDT
CREATE TABLE UDT (
udt_id int NOT NULL ,
id int NOT NULL ,
name varchar(255) NOT NULL ,
gender varchar(255) NOT NULL ,
fatherame varchar(255) NOT NULL ,
mothername varchar(255) NOT NULL ,
dob date NOT NULL ,
signature binary(255) NOT NULL ,
CONSTRAINT UDT_pk PRIMARY KEY (udt_id)
);
- 表格地址
CREATE TABLE address (
address_id int NOT NULL ,
id int NOT NULL ,
add_name varchar(255) NOT NULL ,
add_street varchar(255) NOT NULL ,
city varchar(255) NOT NULL ,
state varchar(255) NOT NULL ,
country varchar(255) NOT NULL ,
pin int NOT NULL ,
CONSTRAINT address_pk PRIMARY KEY (address_id)
);
- 表课程
CREATE TABLE courses (
course_id int NOT NULL ,
course_name varchar(255) NOT NULL ,
CONSTRAINT courses_pk PRIMARY KEY (course_id)
);
- 台式电话
CREATE TABLE phones (
phone_id int NOT NULL ,
id int NOT NULL ,
phone int NOT NULL ,
CONSTRAINT phones_pk PRIMARY KEY (phone_id)
);
- 表格照片
CREATE TABLE photos (
photo_id int NOT NULL ,
id int NOT NULL ,
photo binary(255) NOT NULL ,
CONSTRAINT photos_pk PRIMARY KEY (photo_id)
);
- 表sub_trans
CREATE TABLE sub_trans (
sub_trans_id int NOT NULL ,
transactions_t_id int NOT NULL ,
subjects_sub_id int NOT NULL ,
CONSTRAINT sub_trans_pk PRIMARY KEY (sub_trans_id)
);
- 表科目
CREATE TABLE subjects (
sub_id int NOT NULL ,
course_id int NOT NULL ,
subjectname varchar(255) NOT NULL ,
CONSTRAINT subjects_pk PRIMARY KEY (sub_id)
);
- 表格交易
CREATE TABLE transactions (
t_id int NOT NULL ,
id int NOT NULL ,
course_id int NOT NULL ,
p_status int NOT NULL DEFAULT 0 ,
phones_phone_id int NOT NULL ,
UDT_udt_id int NOT NULL ,
photos_photo_id int NOT NULL ,
address_address_id int NOT NULL ,
CST_cst_id int NOT NULL ,
CONSTRAINT transactions_pk PRIMARY KEY (t_id)
);
- 表用户
CREATE TABLE users (
id int NOT NULL ,
name varchar(255) NOT NULL ,
email varchar(255) NOT NULL ,
password int NOT NULL ,
CONSTRAINT users_pk PRIMARY KEY (id)
);
`
答案 0 :(得分:0)
<强> UDT 强>:
错字父姓。 UDT有什么FK?用户?在UDT中减小varchar大小。当然你想要一个名单的专栏?好的,至少是你选择不超过2个父母的文件。否则你需要另一张桌子。
用户强>:
通过哈希函数运行的密码不会是整数,用户需要Salt才能获得最佳安全性。 IMHO。
等待下面的更多说明
UDT和用户都没有任何用途。选择一个,从你正在抛弃的地方拾取丢失的田地。
即使假设不是1:1,name
也会使数据库失真。
<强>电话强>:
需要描述您的手机专栏。用户也可以有多个电话(如果是这样,电话号码varchar(10)或国内代码?)
我也会像电话value
上的varchar(30)而不是int。
<强>地址强>:
与手机相同的交易。用户可以拥有多个吗? PostalCode引脚应为varchar
<强>交易强>:
这似乎是您架构的中心。您的所有交易都依赖于FK到可能随后更改的数据。 我看到了风险。旧的交易可能会导致查找结果偏差。如果您将其视为一个问题,可以通过简单的方法解决此问题。课程也一样。如果历史101的id保持不变但下一学期的id是早期罗马帝国怎么办?只是要考虑的事情。
最后,记录的表格没有显示FK关系。