关于数据库设计的建议

时间:2015-08-04 13:12:43

标签: mysql database

我正在为我的网站建立一个数据库。我这里有一个架构: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)
);

`

1 个答案:

答案 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关系。