有人可以解释一下 SELECT 语句的概念执行顺序是什么,并提供一个示例吗?
我在谷歌上搜索过,但他们似乎都使用相同的例子,但没有彻底的解释。
在一个关系中我们可以有多个候选键。但是我们可以在长度不同的关系中拥有两个候选键吗?
假设我有一个关系 R(A,B,C,D,E),并且我们只有两组唯一标识该关系中的元组的属性:{A,B,C} 和 {D,E}。
那么我们可以说 {A,B,C} 和 {D,E} 都是候选键吗?
所以我试图围绕整个"规范化"的事情.为了更好地理解它,我想出了一个存储歌曲的案例
假设我有以下数据库:
专辑表:
album_name| genre
album_1| genre_1, genre_2
album_2| genre_1
album_3| genre_2
Run Code Online (Sandbox Code Playgroud)
为了规范化,我想到了以下方法
专辑表:
album_name| genre_id
album_1| 3
album_2| 1
album_3| 2
Run Code Online (Sandbox Code Playgroud)
流派表:
genre_id| genre_1| genre_2
0| false| false
1| true| false
2| false| true
3| true| true
Run Code Online (Sandbox Code Playgroud)
因此,如果弹出一个新类型,我需要做的就是在流派表中创建一个新列,并且genre_id可以分配新的相应列.那么,这将需要填写所有可能的组合,但这只会针对每个引入的新类型发生一次.
另外,我想到的是,这会被认为是"正常化"吗?从我看过的例子中,我还没有看到创建包含原始数据列的表.
在给定的表中,如果没有主键甚至不可能创建复合主键,那么该表的正常形式是什么?
如果它的零(0NF)添加一个新列并使其成为主键会将这个表转换为 1NF ?
database database-design relational-database database-normalization
我对 C# 还很陌生,我正在尝试编写一个扩展方法来使用自定义引号连接对象/字符串的集合。我有两种实现它的方法,试图找出哪种方法是标准方法。
第一种方法,为我需要的每种类型定义一个方法:
public static string JoinToString(this IEnumerable<string> stringEnumerable, string delimiter = ",", char quote = '\'');
{
return string.Join(delimiter, stringEnumerable.Select(item => quote + item + quote));
}
Run Code Online (Sandbox Code Playgroud)
public static string JoinToString(this IEnumerable<int> intEnumerable, string delimiter = ",", char quote = '\'')
{
return string.Join(delimiter, intEnumerable.Select(item => quote + item.ToString() + quote));
}
Run Code Online (Sandbox Code Playgroud)
ETC...
第二种方法:仅定义对象参数,因此它可以与任何类型一起使用(就像 Console.WriteLine(object) 一样)
public static string JoinToString(this IEnumerable<object> enumerable, string delimiter = ",", char quote = '\'')
{
return string.Join(delimiter, enumerable.Select(item => quote + item.ToString() …Run Code Online (Sandbox Code Playgroud) 这是家庭作业的一部分.我有几个问题要求找到薪水最高或薪水最高的员工.找到经过大多数飞机认证的飞行员.我对如何做到这一点一无所知.本章中没有任何示例,谷歌证明不那么有用.如果有人能告诉我如何做其中之一,那将会有很大帮助.
这是表格:
飞机(援助:整数,aname:string,cruisingrange:整数)
认证(eid:整数,辅助:整数)
员工(eid:integer,ename:string,salary:int)
我已经下载了 MySQL Workbench 并且可以创建 EER 图。
这和 UML 图有什么区别?
ERD 从何而来?
我对设计数据库相对较新,我想知道在同一个表中的行之间实现多对多关系的规范方法是什么。
就我而言,我有一个公式表,我想说表中的两个公式是相关的:
公式表:
formula_id SERIAL PRIMARY KEY
name TEXT NOT NULL
formula TEXT NOT NULL
Run Code Online (Sandbox Code Playgroud)
我假设我会创建一个名为 related_formulas 的新表,然后执行以下操作:
formula_relation_id SERIAL PRIMARY KEY
formula_id INT REFERENCES formulas (formula_id) ON DELETE CASCADE
formula_id2 INT REFERENCES formulas (formula_id) ON DELETE CASCADE
Run Code Online (Sandbox Code Playgroud)
但后来我预见到了一些问题,例如阻止同一行中的两个 id 具有相同的值。我确信由于我自己的经验不足,还有其他潜在的问题我没有看到。
有人能指出我正确的方向吗?
我对某些数据库规范化有些困惑,并认为我会问StackOverflow:
想象一下,您具有以下将产品与颜色相关联的关系。请注意,产品1和产品2都使用相同的颜色集(蓝色和绿色)。
Product_Color Color
+-------------+-------------+ +-------------+-------------+
| Product* | Color* | | ColorId* | Name |
+-------------+-------------+ +-------------+-------------+
| 1 | 1 | | 1 | Blue |
| 1 | 2 | | 2 | Green |
| 2 | 1 | +-------------+-------------+
| 2 | 2 |
+-------------+-------------+
Run Code Online (Sandbox Code Playgroud)
如果创建两个新的关系ColorSet和ColorSet_Color,则可以通过将这4个关系连接在一起来显示相同的信息。
Product_ColorSet: ColorSet_Color:
+-------------+-------------+ +-------------+-------------+
| Product* | ColorSetId* | | ColorSetId* | ColorId* |
+---------------------------+ +-------------+-------------+
| 1 | 1 | | 1 | 1 |
| 2 | …Run Code Online (Sandbox Code Playgroud) 我有这两张桌子。
如果我确定它们位于 3NF 中,这是正确的方法吗?我的答案:
StaffDetails( StaffID , SName, DOB, DivisionNo*)
Division( DivisionNo , DivName, DivSupervisorID)
StaffProject( StaffId *, ProjectNo *, SName, ProjectName, HoursAssigned)
项目(项目编号, 项目名称)
主键是粗体的,但是星号后面的原因是什么?
database database-design third-normal-form database-normalization
我有一个表,hs_book其中有一列名为GENRE_ID
我从一个名为的表中获取该类型的描述GENRE
我的列子查询Genre:
SELECT *,
Genre = (
SELECT DESCRIPTION
FROM GENRE
WHERE GENRE_ID = (
SELECT TOP 1 GENRE_ID
FROM BOOK_GENRES
WHERE BOOK_ID = hs_book.BOOK_ID
)
)
FROM hs_book
Run Code Online (Sandbox Code Playgroud)
当我执行此查询时,我得到 525 本书(这是正确的)。
应高级 DBA 的要求,我尝试将其转换为 JOIN,这样我就不需要子查询,所以我这样做了:
SELECT * FROM hs_book hsb
INNER JOIN BOOK_GENRES bg ON hsb.BOOK_ID = bg.BOOK_ID
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到了 541 个结果,比子查询多了 16 个结果。
经过查资料,我发现有些书有多个GENRE_IDs.
有没有办法修改我的加入,以便我只为每本书返回一种类型?
database ×7
rdbms ×2
relational ×2
c# ×1
eer-model ×1
erd ×1
ienumerable ×1
join ×1
many-to-many ×1
mysql ×1
postgresql ×1
select ×1
sql ×1
sql-server ×1
string ×1
t-sql ×1
tuples ×1
uml ×1
unique-key ×1