草庐IT

mysql - MySQL中正确实现父类(super class)型子类型

coder 2023-10-25 原文

下面是一个数据库的图表,我试图在其中确定合适的设计。这里有一些注意事项。

  • 员工/经理与客户相关联。
  • partyid 是一种在全局范围内代表一个人的方式;客户,员工,经理。需要一直向下传播吗?它应该是所有表中的主键还是仅代表个人的表?
  • 其他表,如billingreportingcredential 等表是否需要有自己的主键 ID,例如billingidreportingidcredentialid 等?

关于实体交互的一些注释。

  • 员工有一个经理与之相关。
  • 客户有一个经理和可能的员工与之相关。
  • 客户员工需要报告计费时间。

最佳答案

表格“party”看起来不对。与来自 this other SO question 的源代码进行比较.

在这种结构中,派对 ID 号可以说是向下传播的。在存储个人数据的表中,它通常应该是主键或外键。

在您的“reporting”表中,主键看起来不应该是“partyid”。这将允许每个员工只排一行,我认为你不是故意的。 (我可能是错的。)如果我是对的,您可以考虑对 {partyid, date} 进行 NOT NULL UNIQUE 约束,对 {partyid, date} 进行 PRIMARY KEY 约束一个新列,'reportid'。 “travel”和“performance”表可能会引用“reportid”。 (但请继续阅读。)

在您的图表中的某些地方,实体获得了一个额外的键:例如,您的公司为其员工分配了一个唯一的员工 ID 号。从那时起,从理论上讲,您不能使用“employid”而不是“partyid”来引用员工。但是, 有一个您可能不想这样做的实际原因。它增加了连接的数量。

例如,如果表“credential”、“tool”、“certification”、“academic”和“compliance”引用的是 employee.employid 而不是 employee.partyid,则不能只加入“compliance”和“party”来获取此人的姓名。您也必须加入“员工”。

Do the other tables such as billing, reporting, credential, etc tables need to have their own respective id's that are primary keys, e.g. billingid, reportingid, credentialid, etc?

他们需要有一个主键;主键不一定是身份证号。如果存在现有的自然键,您必须识别它并声明它是唯一的。

表“orders”应该只有“orderid”作为它的主键;使用外键引用来识别客户。在某些情况下,重命名列是有意义的。对于客户,将其键称为“customerid”而不是“parytid”可能更有意义。我会自己创建一个域。

create domain PARTY_ID as integer not null;

然后,在任何需要党 ID 号的地方,我都会使用域名。

create table customers (
    customerid PARTY_ID primary key references parties (partyid),
...

我也希望看到一张经理表。对它的引用将保证 manager.managerid 将解析为实际经理,而不仅仅是任何员工。

关于mysql - MySQL中正确实现父类(super class)型子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6890133/

有关mysql - MySQL中正确实现父类(super class)型子类型的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. Ruby——嵌套类和子类是一回事吗? - 2

    下面例子中的Nested和Child有什么区别?是否只是同一事物的不同语法?classParentclassNested...endendclassChild 最佳答案 不,它们是不同的。嵌套:Computer之外的“Processor”类只能作为Computer::Processor访问。嵌套为内部类(namespace)提供上下文。对于ruby​​解释器Computer和Computer::Processor只是两个独立的类。classComputerclassProcessor#Tocreateanobjectforthisc

  3. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  4. Ruby - 如何处理子类意外覆盖父类(super class)私有(private)字段的问题? - 2

    假设您编写了一个类Sup,我决定将其扩展为SubSup。我不仅需要了解你发布的接口(interface),还需要了解你的私有(private)字段。见证这次失败:classSupdefinitialize@privateField="fromsup"enddefgetXreturn@privateFieldendendclassSub问题是,解决这个问题的正确方法是什么?看起来子类应该能够使用它想要的任何字段而不会弄乱父类(superclass)。编辑:equivalentexampleinJava返回"fromSup",这也是它应该产生的答案。 最佳答案

  5. ruby-on-rails - 无法安装 mysql2 0.3.14 gem - 2

    我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby​​目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin

  6. ruby - 如何使用 ruby​​ mysql2 执行事务 - 2

    我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi

  7. ruby - 访问父类实例变量 - 2

    这是如何工作的?classAattr_accessor:namedefinitializeparams@name=params[:name]@collection)endend基本上,我需要父类中的一个值用于子类的查找,但如果有更好的方法,我不想显式传递它。父类的实例变量在子类中是否完全不可访问?或者这只是糟糕的层次结构设计? 最佳答案 我真的不知道您要在这里做什么-您发布的所有代码都适用于实例变量。实例变量是针对每个对象的,而不是针对每个类的,所以当您说“我需要父类的值”时,我不知道您的意思。我在您的代码中注意到了几件事:基类应该

  8. ruby-on-rails - Rails - 父类(super class)不匹配 - 2

    玩转Rails和Controller继承。我创建了一个名为AdminController的Controller,其中一个名为admin_user_controller的子类位于/app/controllers/admin/admin_user_controller.rb这是我的routes.rbnamespace:admindoresources:admin_user#Havetheadminmanagethemhere.endapp/controllers/admin/admin_user_controller.rbclassAdminUserController应用程序/Contr

  9. ruby - 在 ruby​​ 中使用正确的异常子类 - 2

    我可以访问ruby​​的异常层次结构(它在镐和蜂鸟中都提到过),但我不确定使用哪个异常,因为我没有找到关于每个术语含义的任何信息。使用正确的异常类重要吗? 最佳答案 创建您自己的异常时很重要。一个重要的警告是,继承自Exception而不是StandardError(常见错误)的异常不会被rescue捕获(没有任何参数)。 关于ruby-在ruby​​中使用正确的异常子类,我们在StackOverflow上找到一个类似的问题: https://stackove

  10. ruby-on-rails - 当我通过 rvm 使用 rails3 时,如何在 ubuntu 上安装 mysql2 gem? - 2

    我正在尝试绕过rails配置这个极其复杂的迷宫。到目前为止,我设法在ubuntu上设置了rvm(出于某种原因,ruby在ubuntu存储库中已经过时了)。我设法建立了一个Rails项目。我希望我的测试项目使用mysql而不是mysqlite。当我尝试“rakedb:migrate”时,出现错误:“!!!缺少mysql2gem。将其添加到您的Gemfile:gem'mysql2'”当我尝试“geminstallmysql”时,出现错误,告诉我需要为安装命令提供参数。但是,参数列表很大,我不知道该选择哪些。如何通过在ubuntu上运行的rvm和mysql获取rails3?谢谢。

随机推荐