那么这是我的问题我有三张桌子; 地区,国家,国家.国家可以在区域内,州可以在区域内.地区是食物链的顶端.
现在我添加一个包含两列的popular_areas表; region_id和popular_place_id.是否有可能使popular_place_id成为国家或州的外键.我可能不得不添加一个popular_place_type列来确定id是否描述了一个国家或州.
我正在开发一个多选在线测试项目,我已经设计了数据库来存储结果,但寻找更优化的方法.
要求:
我的设计:
表:
学生
stud_id,姓名,电子邮件
测试
test_id,testname,duration
问题
que_id,问题,opt1,opt2,opt3,opt4,answer,test_id
回答
stud_id,que_id,回答
通过这种方式可以存储答案但是它增加了记录的数量,因为学生新记录解决的每个问题都将被添加到答案表中.
例如,一个测试包含100个问题,1000个学生参加该测试,每个学生每个问题将有100个记录,1000个学生将有100个记录.
有没有更好的方法来做到这一点,记录数量会减少.
假设我有2个表,我可以"合并"并表示在一个嵌套数组中.
考虑到:我正在徘徊这是最好的方法.
我想到的两种简单方法(如果你有其他人,请建议!注意我要求一个简单的SERVER-SIDE和RELATIONAL-DB,所以请不要浪费你的时间来解释为什么我不应该使用这种DB,使用MVC设计等等......):
我试图给出一个简单而详细的例子,以便解释自己并更好地理解你的答案(虽然如何编写代码和/或发现可能的错误不是问题,所以尽量不要关注那个...... .)
CREATE TABLE persons
(
id int NOT NULL AUTO_INCREMENT,
fullName varchar(255),
PRIMARY KEY (id)
);
INSERT INTO persons (fullName) VALUES ('Alice'), ('Bob'), ('Carl'), ('Dan');
CREATE TABLE phoneNumbers
(
id int NOT NULL AUTO_INCREMENT,
personId int,
phoneNumber varchar(255),
PRIMARY KEY (id)
);
INSERT INTO phoneNumbers (personId, phoneNumber) VALUES ( 1, '123-456'), ( 1, '234-567'), (1, '345-678'), (2, '456-789'), (2, '567-890'), (3, '678-901'), (4, '789-012');
Run Code Online (Sandbox Code Playgroud)
我正在尝试为候选人开发数据库模型,他们的注册考试和考试成绩.这就是我到目前为止所做的.但我不确定是否在正确的轨道上,特别是从检查表到检查结果表.为特定候选人编写一个插入sql代码以供检查人群使用是多么容易
考试类型分为科学,艺术和社会科学.它们每个都有4个组件

database database-design uml relational-database database-schema
我想知道如何正确地设置主键的关系.例如,我们有ER图表,其中包含元素:
为了将其转换为关系模型,我们应该做一些技巧.上述处理关系的主键,但所有的元素都在自然键 -所以我们可以把它们原样或更换代理键.
考虑一些情况.
密钥属性是一个名称 - 因此它必须是类型CHAR或VARCHAR.通常,名称成为关键属性.
两个(或更多)识别关系成为关系的复合主键(由外键组成).
识别具有弱密钥属性的关系也成为复合主密钥.
关联实体通常具有两个或多个识别关系,因此它们是连接关系(连接表).
如何为关系设置主键以处理所有上述情况(可能还有一些我没有提及的情况)?
如何避免使用代理键以及在哪些情况下他们是必要的?
如何设置主键的数据类型?
如果必须将复合主键传递给子关系,是否应该用代理替换?
在我的视图中使用代理键的优点和缺点:
它们是紧凑的(通常是类型的INT),有时可以替代复合键
当他们在外国钥匙时,他们是说明性的
他们被无痛地编入索引
他们是数字而且毫无意义.例如,我希望在我的界面应用程序中填写连接表 - 所以我将别无选择,只能将数字联系起来 …
database database-design entity-relationship relational-database database-schema