English 中文(简体)
数据库设计 - 编写有关现有用户或现有用户或普通用户的文献
原标题:Database Design - Writing something about existing user or not existing user or General

我正开发一个网站, 与母亲有关的东西。 任何机构都可以在网站上注册,

(1) 母亲也可以是用户的一部分(注册用户表)

2 (2) 如果她在注册用户表中不存在, 用户必须写上母亲的名字。

3) 与母亲无关,只写一些关于母亲的通用主题。

<强 > 用户表:-

 `user_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_name` varchar(25) CHARACTER SET latin1 NOT NULL,
  `surname` varchar(30) CHARACTER SET latin1 NOT NULL,
  `name` varchar(30) CHARACTER SET latin1 NOT NULL,

“强”关于母亲表(第1例):-

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `mother_id` int(10) unsigned NOT NULL,  ( user_id of the above table)
  `subject` varchar(150) NOT NULL,
  `details` text NOT NULL,

上表列出了在系统中母亲是否存在的情况。

" 强 " 关于母亲表(第2例):- " 强 " / " 强 "

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `mother_name` varchar(50) unsigned NOT NULL,  
  `subject` varchar(150) NOT NULL,
  `details` text NOT NULL,

上表列出了在系统中不存在母亲的情况。

母亲桌(第3例):-

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `subject` varchar(150) NOT NULL,
  `details` text NOT NULL,

上表涉及的是母亲的一般情况。

现在显示不同的母亲名单(最近的母亲名单先列出,而不是母亲的详细情况)

我必须加入第一任母亲桌和用户桌, 才能得到名字,

如果需要我显示关于母亲的详情 < / 强 > < 强 > 。

我有工会三张桌子,日期依次递减

我觉得我让事情变得很复杂。

如果我将三个表格合并为一个表格,ID将是不存在的Null,如果是一般性评论,ID和母亲的名字将是无效的。 有人能给我最好的设计方法吗?

谢谢

观 观 观

基林

最佳回答

因为母亲也可以成为使用者, 假设每个孩子最多能写一篇关于母亲的评论, 看来你需要这样的东西:

""https://i.sstatic.net/zxisC.png" alt="此处输入图像描述"/ >

您需要限制某些字段的耐久性,以确保如果某人有母亲,此人是注册用户(拥有用户名称),且有主题和描述:

CHECK (
    (MOTHER_ID IS NULL AND MOTHER_SUBJECT IS NULL AND MOTHER_DETAILS IS NULL)
    OR (USER_NAME IS NOT NULL AND MOTHER_ID IS NOT NULL AND MOTHER_SUBJECT IS NOT NULL AND MOTHER_DETAILS IS NOT NULL)
)

要想让所有也是母亲的人成为母亲,你可以做这样的事情:

SELECT *
FROM PERSON T1
WHERE EXISTS (
    SELECT *
    FROM PERSON T2
    WHERE T1.PERSON_ID = T2.MOTHER_ID
)

普通英语:选择母亲至少一人的人。

您需要一个 MOHER_ ID 上的索引来优化此查询的执行( 有些数据库自动在外国密钥上创建索引 ) 。

--- EDIT ---

如果用户能写下许多关于母亲的记忆,

""https://i.sstatic.net/mQbOX.png" alt="此处输入图像描述"/ >

不幸的是,这允许出现非用户写入记忆的情况。 如果您绝对要避免这种情况, 要么使用一个可以使用 NULL 可操作的 UIQUE 限制的数据库作为外国密钥的父端点, 并使用 USER_NAME 而不是 person_ID 连接表格, 或者如果您不介意某些复杂情况, 这样做 :

""https://i.sstatic.net/OoGt9.png" alt="此处输入图像描述"/ >

符号 : 此处输入图像描述 表示类别(a.k.a. 继承、一般化等级等),但这一特定模式有一个曲折:个人既可以是USER,也可以是MOHER(即所谓的“无区别”类别)。

问题回答

暂无回答




相关问题
How to model a many-to-many relationship in App Engine?

I have a question regarding how to model a many-to-many relationship in App Engine: A Blogentry can have many tags, a tag can apply to many blog entries. I see a couple of scenarios: Use a Set of ...

How to emulate tagged union in a database?

What is the best way to emulate Tagged union in databases? I m talking about something like this: create table t1 { vehicle_id INTEGER NOT NULL REFERENCES car(id) OR motor(id) -- not valid ... } ...

Users asking for denormalized database

I am in the early stages of developing a database-driven system and the largest part of the system revolves around an inheritance type of relationship. There is a parent entity with about 10 columns ...

How to best implement a 1:1 relationship in a RDBMS?

Yesterday while working on a project I came up on a peculiar 1:1 relationship which left me wondering - how to best implement this (clearly, we had done it wrong :D) The idea is that there are two ...

Automatic filling entity properties

I have some type an architect(?) question I develop an application, based on Spring and Hibernate (annotated configuration) For each table in my database I added 4 fields: createdBy and modifiedBy(...

热门标签