Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.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
Database design 带有社交网络设计的评论系统_Database Design_Yii_Hybridauth - Fatal编程技术网

Database design 带有社交网络设计的评论系统

Database design 带有社交网络设计的评论系统,database-design,yii,hybridauth,Database Design,Yii,Hybridauth,您好,我正在制作一个简单的网站与评论系统。用户可以使用社交网络ID(FB、Twitter等)登录或注册网站并发表评论(有些用户不愿意为此使用他们的FB帐户)。我有两个可用的表(一个用于HybridAuth,另一个用于本地用户表)。现在我的问题是,我如何设计表格和整个系统,使其以这种方式运行?基本上,我的问题可以分解如下:Comments表需要注释者的ID(FK来自这两个表中的任何一个,但不能同时来自这两个) 那么,常用的方法是什么(因为许多网站都使用disqs、FB、twitter等) 如果在S

您好,我正在制作一个简单的网站与评论系统。用户可以使用社交网络ID(FB、Twitter等)登录或注册网站并发表评论(有些用户不愿意为此使用他们的FB帐户)。我有两个可用的表(一个用于HybridAuth,另一个用于本地用户表)。现在我的问题是,我如何设计表格和整个系统,使其以这种方式运行?基本上,我的问题可以分解如下:Comments表需要注释者的ID(FK来自这两个表中的任何一个,但不能同时来自这两个)

那么,常用的方法是什么(因为许多网站都使用disqs、FB、twitter等)


如果在SO或其他地方有任何链接,我将很高兴被指向。

有两种方法:

#1独家FKs 如前所述,将FK和CHECK约束置于它们之上,以确保其中一个为NULL

请注意,某些DBMS(最著名的是MySQL)不强制执行检查约束,在这种情况下,您需要从触发器或客户端代码执行检查约束

#2继承
从一个公共表“继承”这两种用户,然后只引用公共表。下面是如何对“可评论”和“可标记”以及“可喜爱”的内容执行此操作的示例,类似的原则可应用于用户。

如何在触发器中执行此操作?在客户端代码中,这是可以做到的,但我发现这会有点昂贵(首先检查是否为Null,然后使用),在等待您的评论时,我会接受答案,因为它为我提供了正确的方向@斯蒂法诺我不确定我是否理解你的问题。您只需创建一个INSERT/UPDATE触发器,显式检查该触发器,并在两个FK都非空时引发异常。具体语法/细节因DBMS而异。我从未在任何DBMS中使用过触发器(从未满足任何需要它们的要求)。我使用MySQL和Yii