Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL如何引用变量列_Mysql_Sql_Variables_Reference - Fatal编程技术网

Mysql SQL如何引用变量列

Mysql SQL如何引用变量列,mysql,sql,variables,reference,Mysql,Sql,Variables,Reference,我正在尝试创建一个壁纸共享库,我希望我的访问者能够对壁纸和文章发表评论 假设我有以下表格: Wallpaper - id - name - etc... Article - id - title - etc... Comment - id - text 我想一个评论,要么是一个独特的壁纸或一个独特的文章相关联 我考虑过这样继承遗产: Commentable - id Article - id references Commentable.id - etc... Wallpaper -

我正在尝试创建一个壁纸共享库,我希望我的访问者能够对壁纸和文章发表评论

假设我有以下表格:

Wallpaper
- id
- name
- etc...

Article
- id
- title
- etc...

Comment
- id
- text
我想一个评论,要么是一个独特的壁纸或一个独特的文章相关联

我考虑过这样继承遗产:

Commentable
- id

Article
- id references Commentable.id
- etc...

Wallpaper
- id references Commentable.id
- etc...

Comment
- id
- commented references commentable.id
但是这种方法看起来很重,也不是很好

我还考虑过制作:

Wallpaper
- id
- name
- etc...

Article
- id
- title
- etc...

Comment
- id
- commented references either Wallpaper.id or Article.id
但是没有办法知道相关的东西是墙纸还是一篇文章

另外,我想使用MyISAM而不是InnoDB,因为我将使用5.1 MySQL在一个免费的web主机服务上上传它

你知道有什么明确的方法吗?提前谢谢


编辑:感谢大家的回答。

我想做一些简单的事情,比如在评论表中添加一个名为type的字段,使其成为一个小窗口。然后,在存储评论时,您可以将其设置为0或1,选择哪种类型,从而确定0是否是文章的墙纸。

我会选择一些简单的方法,比如在评论表中添加一个名为type的字段,使其成为一个小窗口。然后,在存储评论时,您可以将其设置为0或1,选择哪种类型,从而确定0是否为文章的墙纸。

有两个选项供您选择:

选择一

优点:引用完整性 缺点:您必须修改模式以对其他实体类型进行注释

选择二

优点:您不必修改模式来评论其他实体类型 缺点:没有引用完整性,尽管可以通过触发器强制执行,但有两个选项供您选择:

选择一

优点:引用完整性 缺点:您必须修改模式以对其他实体类型进行注释

选择二

优点:您不必修改模式来评论其他实体类型
缺点:虽然可以通过触发器强制执行引用完整性,但我建议在注释表中添加一个类型字段。您可以使用类似“ARTICLE”或“WALLPAPER”的字符串填充它,或者创建一个ref表。比如:

Type_Ref
- id
- desc
Type_Ref将包含自动递增的主键,以及墙纸或文章的描述


然后,在您的评论表中,您只需要一个带有相应Id的Type_Ref_Id字段。然后,每当您需要添加一个新类型进行投票时,您只需向Ref表添加一个条目即可。

我建议在您的评论表中添加一个Type字段。您可以使用类似“ARTICLE”或“WALLPAPER”的字符串填充它,或者创建一个ref表。比如:

Type_Ref
- id
- desc
Type_Ref将包含自动递增的主键,以及墙纸或文章的描述


然后,在您的评论表中,您只需要一个带有相应Id的Type\u Ref\u Id字段。然后,每当您需要添加新类型进行投票时,您只需在Ref表中添加一个条目即可。

谢谢您的回答。我考虑过第一个表,但是如果我有两个以上的表要引用,那么会留下50%的NULL和更多。修改schéma以发表评论是什么意思?@Virus721假设您有一个名为Story的新表,希望用户对其进行评论。使用选项1,您必须修改模式以适应此情况。选项2并非如此。有空列有什么关系?我可以随意修改模式,这不是问题。使用更清晰的模式可以避免许多空值,这听起来不是很好。我想我会选择第二种方式。等等,我已经考虑过另一种方式了!如果我使表格Wallpaper和Article没有任何外键,然后使关联表格如:Wallpaper\u Comment和Article\u Comment,并在Wallpaper_Comment.commentId和Article_Comment.commentId上使用唯一的索引,以确保注释仅与单个文章或墙纸相关?我以前尝试过这种方法,但当您要从多个实体检索注释时,会遇到麻烦,因为此时您正在查询多个表。当然,当您允许对更多实体进行评论时,这些表将激增。我更喜欢上面的选择。谢谢你的回答。我考虑过第一个表,但是如果我有两个以上的表要引用,那么会留下50%的NULL和更多。修改schéma以发表评论是什么意思?@Virus721假设您有一个名为Story的新表,希望用户对其进行评论。使用选项1,您必须修改模式以适应此情况。选项2并非如此。有空列有什么关系?我可以随意修改模式,这不是问题。使用更清晰的模式可以避免许多空值,这听起来不是很好。我想我会选择第二种方式。等等,我已经考虑过另一种方式了!如果我使表格Wallpaper和Article不带任何外键,然后使关联表格如:Wallpaper\u Comment和Article\u Comment,并使用唯一的索引,该怎么办
在Wallpaper_Comment.commentId和Article_Comment.commentId上添加x以确保注释仅与单个文章或墙纸相关?我以前尝试过这种方法,但发现当您要从多个实体检索注释时会遇到麻烦,因为此时您正在查询多个表。当然,当您允许对更多实体进行评论时,这些表将激增。我更喜欢上面的选择。
Type_Ref
- id
- desc