Sql 如何在3nf中设计数据库

Sql 如何在3nf中设计数据库,sql,postgresql,Sql,Postgresql,我设计了我的数据库,但我有一些问题: 我如何检查它是否为3正常形式 关于引用和外键 如果我在DELETE CASCADE上为每个外键选择,我可以从表“boat”中删除一些记录,从表“team”、“jorney”、“tickets”和“solded”中删除reords,但是当我从“boat”中删除记录时,我如何从“personal”和“persons”中删除记录,或者这些记录不从“person”中删除是正常的或“个人” 实际上对于(2),也许我不应该在级联上设置DELETE并为每个外键编写set

我设计了我的数据库,但我有一些问题:

  • 我如何检查它是否为3正常形式
  • 关于
    引用
    外键
    如果我在DELETE CASCADE上为每个
    外键
    选择
    ,我可以从表“boat”中删除一些记录,从表“team”、“jorney”、“tickets”和“solded”中删除reords,但是当我从“boat”中删除记录时,我如何从“personal”和“persons”中删除记录,或者这些记录不从“person”中删除是正常的或“个人”
  • 实际上对于(2),也许我不应该在级联上设置
    DELETE
    并为每个
    外键编写
    set NULL

  • 这个没有自动检查功能。你看一下这个模式,然后应用所讨论的范式的规则。好的,(2)和(3)我应该怎么做:在DELETE SET NULL上写还是在DELETE CASCADE上写?为什么呢?这在很大程度上都是主观的,虽然它们是很好的问题,但它们只是关于数据库设计最佳实践的大讨论的一小部分。对于堆栈溢出问题来说,这实在太宽泛了:这里的事情应该简单明了,切中要害,并且有具体的技术解决方案。例如,如果您有一个查询没有生成正确的结果,或者在定义存储过程时遇到问题,那么这就更理想了。这一系列调查可能需要几个小时才能完全解释清楚。如果你好奇的话,你应该参加一门课程。一个简单的答案可能会回答这个问题,甚至更多。如果你缺少基本原理,你需要得到这个基础才能理解你可能得到的答案。你看一下这个模式,然后应用所讨论的范式的规则。好的,(2)和(3)我应该怎么做:在DELETE SET NULL上写还是在DELETE CASCADE上写?为什么呢?这在很大程度上都是主观的,虽然它们是很好的问题,但它们只是关于数据库设计最佳实践的大讨论的一小部分。对于堆栈溢出问题来说,这实在太宽泛了:这里的事情应该简单明了,切中要害,并且有具体的技术解决方案。例如,如果您有一个查询没有生成正确的结果,或者在定义存储过程时遇到问题,那么这就更理想了。这一系列调查可能需要几个小时才能完全解释清楚。如果你好奇的话,你应该参加一门课程。一个简单的答案可能会回答这个问题,甚至更多。如果你缺少基本原理,你需要了解这个基础,以便了解你可能得到的答案。