标签: database-schema

Facebook的DB Schema,如Wall +"共享链接"

我正在为像facebook结构的facebook制作数据库模式.我需要保存墙贴,共享链接,将视频内容分享到我的数据库中.直到现在我能够制作这个架构:

GO
CREATE TABLE [Wall]
    (
      [ID] [int] NOT NULL IDENTITY(1, 1) ,
      [PostText] [nvarchar](MAX)
      [PostedByUserID] [int] NULL ,
      [PostedOnUserID] [int] NULL ,
      [DateCreated] [datetime] NULL 
    )
GO   
Run Code Online (Sandbox Code Playgroud)

接下来,我必须添加用于添加"共享链接"和"共享视频"功能的架构.

GO
CREATE TABLE [Wall]
    (
      [ID] [int] NOT NULL IDENTITY(1, 1) ,
      [WallText] [nvarchar](MAX)
      [PostedByUserID] [int] NULL ,
      [PostedOnUserID] [int] NULL ,
      [DateCreated] [datetime] NULL,

      [SharedLink] [nvarchar](1024)  NULL ,
      [SharedLinkTitle] [nvarchar](512)  NULL ,
      [SharedLinkDesc] [nvarchar](512)  NULL ,
      [SharedLinkImageSrc] [nvarchar](512)  NULL 
    )
GO
Run Code Online (Sandbox Code Playgroud)

现在有了这个架构:

第一种情况:插入墙柱时,[SharedLink],[SharedLinkTitle],[SharedLinkDesc],[SharedLinkImageSrc]列将插入为空,其余列将具有值.

第二种情况:当插入"链接共享"时,"[WallText]"列将作为空插入,其余列将具有值.

对于我的情况,70%的时间将发布墙贴,30%的"链接"将被共享,这意味着70%的情况[SharedLink],[SharedLinkTitle],[SharedLinkDesc],[SharedLinkImageSrc]将被插入为null .现在我担心的是,是否可以保持插入空列,或者我应该为"共享链接"目的找到一个单独的表,并将分离的表格如下:

GO
CREATE TABLE [LinkShared] …
Run Code Online (Sandbox Code Playgroud)

sql-server schema database-design sql-server-2005 database-schema

3
推荐指数
1
解决办法
1775
查看次数

数据库架构:如何设计用户,文件和文件夹之间的关系?

我想知道如何设计Dropbox的数据库架构?我正在考虑三个表:用户,文件,文件夹具有以下约束。

限制条件:

  1. 一个用户可以包含多个文件和文件夹。
  2. 每个文件可以在多个用户之间共享。
  3. 可以在一个文件夹中为一个用户组织一个文件,但不能为另一个用户组织一个文件(如果文件是共享的)。
  4. 每个文件夹可以包含多个文件以及其他文件夹。

您将如何在它们之间建立关系?

database database-design database-schema

3
推荐指数
2
解决办法
5553
查看次数

标记系统:Toxi解决方案问题

我对标签数据库模式的Toxi解决方案有点不满.我正在开发一个用户可以提交项目的系统,这些项目可以有与之关联的标签.在阅读了标签之后,我找到了最适合我需求的Toxi解决方案.但是,我不完全确定我是否正在计划这个,所以我想请你就此发表意见.

我将有三个数据库.
items包含item_id和其他
tagmap使用item_idtag_id作为外键
tags包含tag_idtag_text

添加新项目时,我是否正确地假设将标记添加到数据库的过程如下?

  1. 将提交的标签排序到数组中
  2. 对于数组中的每个标记:
    1. 从标签中获取tag_id,其中tag_text与当前标签匹配
    2. 如果返回0行:
      1. 将标签添加到标签表
      2. 得到tag_id
    3. 将item_id和tag_id添加到tagmap
  3. 完成(给用户一个好的,等等)

这意味着我们最终会在tagmap中为每个项目的每个标记添加一个条目.这似乎是正确的,但我不禁想到有更好的方法来做到这一点,而不是那里有大量的条目......

至于编辑标签,我已经想到了以下过程,尽管我认为还有一种更好的方法,我还没有找到.

  1. 使用item_id获取标签并插入可编辑字段
  2. 用户进行更改.提交时:
  3. 从tagmap中删除行,其中item_id与正在编辑的行匹配
  4. 与上面列出的过程相同的过程

我对那里的第3点有点不满意.有没有办法让我检查是否有任何标签被删除,所以我可以有选择地删除标签而不是删除和重新添加标签?并且只是为了确定:删除tagmap行时,相关项目不会被删除,因为它指向一个外键而不是一个,对吧?

此外,我可能想要跟踪标记的使用次数,但我不想运行查询来计算每次需要显示的标记.我正在考虑让cron作业每小时或每两小时计算一次tagmap中每个tag_id的实例数,然后更新tags表中的tag_use值.这是一种正确的方法吗,还是有更好的方法?

回想起来,这是相当多的文字.Welp,比缺少信息更详细,而是提出太多问题并学习很多新事物,而不是要求太少.很有可能我今天花了太多时间研究这个问题,明天这一切都会更有意义.

提前致谢!

mysql tagging database-design database-schema

3
推荐指数
1
解决办法
3567
查看次数

了解数据库架构

对于任何Oracle DBA来说,这应该是一个非常简单的问题.

我刚开始使用新的应用程序,并且我要求查看架构.我根本不熟悉Oracle或其命名约定.所以我向你提交以下内容:

在此输入图像描述

我想知道:

  • 为什么与前2个领域和其他领域分离?(我认为那些是PK,但它没有明确说明那么多)
  • 与粗体字段和非粗体字段有什么区别?
  • 'l3','l5'等表示什么?
  • 其他几张桌子(未图示)有'U1'指示,其中这张照片有'l3',这是什么意思?

database database-schema

3
推荐指数
1
解决办法
391
查看次数

数据库设计启用多个标签,如Stackoverflow?

我有以下表格.

文章
a_id INT主要唯一
名称 VARCHAR
描述 VARCHAR
c_id INT

类别
ID INT
cat_name VARCHAR

现在我只是使用

SELECT a_id,name,Description,cat_name FROM Articles LEFT JOIN Category ON Articles.a_id=Category.id WHERE c_id={$id}

这给了我所有属于某个类别的文章以及类别名称.
每篇文章只有一个类别.

我以类似的方式使用子类别(我有另一个名为sub_cat的表).
但是每篇文章都没有必要的子类别.它可能属于多个类别.

我现在想到标记一个包含多个类别的文章就像stackoverflow中的问题被标记一样(例如:有多个标签,如PHP,MYSQL,SQL等).

以后我必须显示(过滤)所有文章与某些标签(例如:标记为php,php + MySQL),我还必须显示标签以及文章名称,描述.
谁能帮我重新设计数据库?(我在后端使用php + MySQL)

mysql database database-design junction-table database-schema

3
推荐指数
1
解决办法
4001
查看次数

在数据库中存储字符串数组

我有一个通过ORM保存到数据库的对象.该对象有一个字符串数组,数组长度可以根据对象而变化.我想知道在数据库中存储String数组的标准做法(例如,我应该将所有字符串存储在一个字段中作为csv等.)?

database orm database-schema

3
推荐指数
1
解决办法
2580
查看次数

设计类别,子类别和相关书籍的数据库

我知道有几个类似于我要求的问题的答案.但他们的做法看起来并不令人信服.

我的问题是如何构建一个可以拥有书籍的类别的数据库和一个也可以有书籍的子类别?

我已经设计了一个数据库,但我不相信这种方法.如果有经验的人给了我一些建议或改进或完全不同的方法,我真的很感激.

我的表格看起来如何(记住这不是实际的代码)

TABLE Category
    ID
    user_id -- Foreign key from user
    name

TABLE SubCategory
    ID
    user_id
    category_id
    name
Run Code Online (Sandbox Code Playgroud)

这本书的表格设计相同.

mysql sql database-design database-schema

3
推荐指数
1
解决办法
5650
查看次数

为什么PostgreSQL SELECT查询在指定模式名称时会返回不同的结果?

我有一个包含4列的PostgreSQL数据库表 - 标记为column_a,column_b等.我想用简单的select查询查询此表:

select * from table_name;
Run Code Online (Sandbox Code Playgroud)

我得到了一些看起来像的结果:

column_a | column_b
---------+---------
'a value'|'b_value'
Run Code Online (Sandbox Code Playgroud)

但是当我使用这个查询时:

select * from schema_name.table_name;
Run Code Online (Sandbox Code Playgroud)

我得到了完整的结果:

column_a | column_b | column_c | column_d
---------+----------+----------+---------
'a value'|'b value' |'c value' |'d_value' 
Run Code Online (Sandbox Code Playgroud)

cd在日后添加,初始表创建后.我的问题是:当模式名称被排除在选择查询之外时,为什么数据库会忽略后面的列?

postgresql database-permissions database-schema search-path postgresql-9.2

3
推荐指数
1
解决办法
944
查看次数

光滑3.1.1不创建唯一约束

我有简单的用户表,id设置为自动增量,也username可以在表中设置为唯一.

class Users (tag: Tag) extends Table[User](tag, "Users") {

  def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
  def username = column[String]("username", NotNull)
  def email = column[String]("email")
  def passwordHash = column[String]("password_hash")
  def createdAt = column[Long]("created_at")
  def updatedAt = column[Long]("updated_at")
  def lastLoggedInAt = column[Long]("last_logged_in_at")

  override def * = (id.?, username, email, passwordHash, createdAt, updatedAt, lastLoggedInAt) <> (User.tupled, User.unapply)

  def idxUsername = index("idx_username", username, unique = true)
}
Run Code Online (Sandbox Code Playgroud)

但是当使用slick(db.run(users.schema.create))创建表时,不会idx_username在数据库上创建唯一索引

这是架构的create语句users.schema.createStatements.foreach(println):

create table `Users` (`id` INTEGER …
Run Code Online (Sandbox Code Playgroud)

mysql scala database-schema slick-3.0

3
推荐指数
1
解决办法
1426
查看次数

解密数据库ER图用于问卷调查

我正在尝试破译我的老师帮助我制作的数据库ER图.我主要是想弄清楚如何构建所需的表并正确组合它们.

所讨论的ER图用于在线调查问卷,其中每个问题都基于前一个问题给出的答案,最终导致解决方案/结束.

每个问题都可以有多个答案,同一个问题可以有多个不同的答案,具体取决于前面给出的答案.

组合表显示哪些答案与哪个问题相关联,以及下一个问题应该是什么,如果给出了具体答案,最终会得出解决方案.

ER图如下所示:

在此输入图像描述

我不明白的是:

解决方案/问题表将包含问题和解决方案,这些问题和解决方案可能有不同的实体,但我不明白这是如何完成的?什么是D?

导致一路口表,因为它是许多人之间有许多连接答案问题/解决方案,但是为什么呢?它们是否未在组合表中连接? - 如果选择了具体的答案,那个表是否不包含知道哪些答案与哪个问题相关所需的所有信息以及下一个问题?

我很难搞清楚如何构建这个数据库,以便它可以按需运行.

mysql database database-design database-schema

3
推荐指数
1
解决办法
512
查看次数