1

我搜索了一下,因为我的情况与“多个表与逗号分隔值”相同,但我的情况不同。我已经完成了这两种做法,但是对于一个新的要求,我有点困惑,因为包含逗号分隔的列的列大约是 3-4 ......所以人们会建议......

Example (Existing Scenario):

Student Table
---------------------
id name subjectsEnrolled gamesEnrolled       BooksIssued             absentOn

1  Naya yoga, maths      cricket, football    aka#date, baka#date,caka#date   20121010,20130103
2  sait science, botany  football,chess,abc   prea#date, sunbaka#date      20121010,20130103

我认为可能的修复

学生表(作为学生主数据)

id name moredetailsofstudent like address & blah blah

1  Naya              
2  Naya      

然后有另一个表缺席表

StudentId absentOn
1  20121010
1  20121011
2  20121010
2  20121011
1  20121012

然后让另一个表掌握具有唯一 ID 的书籍和书籍IssueTable 的“booksTable”

书籍问题表

bookid issuedby dated
4       1       a date
2       1       a date 

对于游戏(2 张桌子)和主题(2 张桌子)几乎相同,并且存储方式与我在上面对书籍所做的相同。

gameid enrolledby 
4       1      
2       12
4       10      
3       12      

等等...

我说得对吗……这就是我想从我们的数据库和编码专家那里知道的。

注意:我不是在创建学校管理...这只是一个示例...因为我无法发布真实数据。在实际场景中,我在主学生表中有太大的数据,比如 10-20 lac ...所以缺席表、booksIssueTable、gamesEnollTable、subjectenrollTable 可以轻松拥有 10 条 lac 记录 * 1-10 ...= 每个大约 30-90 lacs使用这个解决方案。请建议。

更新

到目前为止,我已经知道我正在朝着正确的方向前进,有人会建议让日期缺席吗?我是否也应该为日期创建一个主表,然后使用它的 dateid 来绑定缺席表?

4

2 回答 2

1

是的,规范化比存储逗号分隔值更好。我在这里对逗号分隔值的缺陷给出了一个流行的答案: 在数据库列中存储分隔列表真的那么糟糕吗?

至于您的其他问题,不,我不会为简单的日期值制作查找表。可能有用的场景是 AbsentTable 中有许多行具有相同的日期,并且您希望通过在其他地方更新单行来更改所有这些行的值。但我希望您的 AbsentTable 永远不需要这样做。

顺便说一句,使用 anid来引用另一个表中的条目与 normalization 无关。自然值既可以作为被引用表的主键,也可以作为被引用表的外键,仍然符合范式。

您可能还对我在《SQL 反模式:避免数据库编程的陷阱》一书中所写的关于逗号分隔值和数据库规范化的内容感兴趣。

于 2013-03-22T15:17:50.180 回答
0

您正在做的正是期望得到解决问题的方法,即使有大量数据,它也会达到这样的程度:拥有适当的 mn 表将比在相同字段中使用逗号分隔的值改进得多。

很好地为自己找到解决方案。不能提出更好的建议。

于 2013-03-22T14:30:25.807 回答