我前几天正在考虑规范化,而且我想到了,我想不出一个数据库中应该有1:1关系的时间.
名称:SSN?我将它们放在同一个表PersonID:AddressID?同样,同桌.
我可以提出一个很多或者很多的例子:很多(有适当的中间表),但从不是1:1.
我错过了一些明显的东西吗
我一直想知道Facebook如何设计朋友< - >用户关系.
我认为用户表是这样的:
user_email PK
user_id PK
password
Run Code Online (Sandbox Code Playgroud)
我用用户的数据(性别,年龄等通过用户电子邮件连接,我会假设)来计算表格.
它是如何将所有朋友连接到此用户的?
像这样的东西?
user_id
friend_id_1
friend_id_2
friend_id_3
friend_id_N
Run Code Online (Sandbox Code Playgroud)
可能不是.因为用户数量未知并且将会扩展.
sql database-design facebook database-normalization database-table
我正在尝试更新postgresql数据库的表中的文本字段.
UPDATE public.table SET long_text = 'First Line' + CHAR(10) + 'Second line.' WHERE id = 19;
Run Code Online (Sandbox Code Playgroud)
我的预期结果是单元格看起来像这样:
First Line Second line
上面的语法返回错误.
我有一个名为"Person"的表,其中包含以下字段
是应该将City,State或Country等标准化并分解到自己的表中,然后此表包含CityId和StateId列.我们正在讨论这是一个好的还是坏的决定.
要添加,我确实有一个City和一个State表(由于与此person表无关的其他原因).无论是否有这个额外的事实,我都很好奇.
考虑一个移动设备管理器系统,其中包含每个用户的信息,例如存储他已安装在手机上的应用程序的表,审核详细信息,通知信息等.为每个用户创建一个单独的模式以及相应的表是明智的吗?对于单个用户而言,表的数量很大,每个用户大约30个表.拥有一个单独的模式,将所有这些信息放入这些表(反过来创建庞大的表?)或为每个用户设置模式会更好吗?
提前致谢
我处于开发数据库驱动系统的早期阶段,系统的最大部分围绕着继承类型的关系.有一个包含大约10列的父实体,并且将有大约10个从父级继承的子实体.每个子实体将有大约10列.我认为为父实体提供自己的表并为每个子项提供自己的表 - 每个子类的表结构是有意义的.
今天,我的用户要求查看我创建的系统的结构.他们对每子类表结构的想法犹豫不决.他们更喜欢一个大~100列表,因为它们更容易执行自己的自定义查询.
为了用户的缘故,我应该考虑对数据库进行非规范化吗?
database database-design denormalization database-normalization
举个例子
create table indexing_table
(
id SERIAL PRIMARY KEY,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
);
Run Code Online (Sandbox Code Playgroud)
下表之间有区别吗?
表格1:
create table referencing_table
(
indexing_table_id INTEGER references indexing_table
);
Run Code Online (Sandbox Code Playgroud)
表2:
create table referencing_table
(
indexing_table_id INTEGER references indexing_table NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
或者,在表1的情况下,没有NOT NULL约束,我们是否允许插入包含NULL值的记录?
我有兴趣了解像这样运行的工具:
给定数据库模式和一些数据,建议模式是否可能以任何特定的正常形式构建,然后告诉如何对模式进行分解以产生进一步的规范化.
基本上,用于数据库模式设计的静态分析工具.
像其他静态分析工具一样,这样的数据库工具不需要生成完美的结果(我怀疑这种"完美"工具在计算上是可行的),或者适用于所有数据库系统,或免费/开源,或其他任何东西.该工具不必独立; 它可以捆绑为一些复杂的IDE功能.我只是想知道那里有什么.
在这里,我已经在主要参数声明中写了我的名字,但是这个程序仍然有效并且没有给出任何警告.
#include <stdio.h>
int main(Mr32)
{
printf("why this works?");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
每当我写任何东西代替mr32时,代码仍然有效.我真的不知道为什么会这样.根据C编程标准,这是错误的,对吧?
编辑: 我已经尝试过 - 但它没有发出任何警告.
我认为这应该是错误,因为我没有做标准的C函数定义声明
在c中,每个函数定义都必须遵循此格式
return-type function_name ( arg_type arg1, ..., arg_type argN );
Run Code Online (Sandbox Code Playgroud)
这也应该适用于main()吧.. ??
好的-Wextra显示警告mr32默认为int.
那么为什么main()中的任何参数的默认类型都是int?
c compiler-construction error-handling gcc program-entry-point
我有一个DELETE查询,我需要在PostgreSQL 9.0.4上运行.我发现它是高性能的,直到它在subselect查询中遇到524,289行.
例如,在524,288,没有使用物化视图,成本看起来很不错:
explain DELETE FROM table1 WHERE pointLevel = 0 AND userID NOT IN
(SELECT userID FROM table2 fetch first 524288 rows only);
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Delete (cost=13549.49..17840.67 rows=21 width=6)
-> Index Scan using jslps_userid_nopt on table1 (cost=13549.49..17840.67 rows=21 width=6)
Filter: ((NOT (hashed SubPlan 1)) AND (pointlevel = 0))
SubPlan 1
-> Limit (cost=0.00..12238.77 rows=524288 width=8)
-> Seq Scan on table2 (cost=0.00..17677.92 rows=757292 width=8)
(6 rows)
但是,一旦我达到524,289,物化视图就会发挥作用,DELETE查询变得更加昂贵:
explain DELETE FROM table1 WHERE pointLevel = 0 AND userID NOT IN …
database postgresql materialized-views query-performance sql-delete
database ×5
postgresql ×3
sql ×2
c ×1
char ×1
facebook ×1
foreign-keys ×1
gcc ×1
genexus ×1
multi-tenant ×1
one-to-one ×1
primary-key ×1
reference ×1
sql-delete ×1
sql-update ×1