将泛化转换为 mysql 方案
我画了这个布局方案,但现在我需要转换为“mysql
布局”。所以泛化
必须使用两个连接表
,对吗? (一个用于学生,另一个用于工人)
关于多重性
,用户可以是工人或学生,但一个用户只能是一个工人,一个工人只能是一个用户?这没有多大意义......?
基本上,我如何将这个泛化转换为可以为 mysql 代码执行的东西。
谢谢
i drew this layout scheme, but now i need to convert for a "mysql
layout". So the generalization
must use two junction tables
, correct? (one for student and other for worker)
An about the multiplicity
, users can be workers or students, but one user only can be one worker and one worker only can be an user? this does not make much sense...?
basically, how i can convert this generalization
for something that can be executable for mysql
code.
thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
ORM 有 3 种方法可以做到这一点。
第一种方法是给它们每个单独的表并连接这些表。 (3tables)
第二种方法仅在您的用户类是抽象类的情况下才有效,然后您为子类使用 2 个表。
最后也是我最喜欢的方式。
您将所有内容都放入一个表中,并引入一个鉴别器列。
基本上制作一个包含用户、学生和工人所有字段的表。
为类型添加一个额外的列并相应地填充它们。
您可以使用鉴别器列轻松选择所有学生/工作人员,并且不必发送垃圾邮件连接。缺点是占用额外空间。
There are 3 ways ORM's do it
First way is give them each a separate table and join the tables. (3tables)
Second way only works if your users class is abstract, then then you take 2 tables for your sub-classes.
And the last and my favorite way.
you stuff everything in one table, and introduce a discriminator column.
basically make a table containing all the fields of users, student and worker.
add an extra column for the type and fill em up accordingly.
You can select all students / workers easily using the discriminator column, and you don 't have to spam joins. The downside is it takes up extra space.
处理此问题的一种方法是定义三个表:用户、工人和学生。工人和学生表都有一个 user_id 字段,该字段是与用户表中同一字段关联的外键。
One way to handle this is to define three tables: users, workers, and students. The workers and students tables each has a user_id field that is a foreign key tied to the same field in the users table.