标签: database-schema

“向下”迁移何时有用?

简洁版本:

移民怎么了down?在什么情况下您需要使用它?

长版:

许多支持数据库模式版本的框架(包括但不限于Rails的“迁移”)允许开发人员指定如何up反转数据升级(操作down),甚至通过分析代码自动生成降级操作(如 Rails 的change方法)。

事实上,在我遇到的所有 Rails 迁移代码中这样做似乎非常常见,这让我想知道这是否被认为是最佳实践。

就我个人而言,我从来没有需要降级数据库模式,而且我无法想象我想要的合理场景,无论是在开发还是生产中。我的经历似乎与普遍的down迁移不一致,所以我猜我错过了一些东西......

a 在哪些最常见的场景中down有用?

ruby-on-rails database-migration database-schema rails-migrations

7
推荐指数
1
解决办法
3679
查看次数

MySQL 表名按依赖顺序排序

我想获取按其依赖顺序排序的表名。

例如:如果我有 table usersusers_orders并且orders我想按以下顺序获取表名:(usersorders无关紧要), orders, users_orders.

如果有办法请帮忙。

mysql foreign-keys database-schema

7
推荐指数
1
解决办法
1551
查看次数

对于接受来自多个站点的登录(例如facebook connect,google,flickr等)的站点,架构的良好做法是什么?

我在http://dba.stackexchange.com上提出了这个问题,但它已经关闭了,我在这里应该问一下,因为它与设计而不是管理有关.

我正在构建一个站点("站点"),我正在考虑如何为它设计数据库架构.

我有一些会影响结果的场景:

  • 用户可以选择在网站上注册本机帐户,这将使他在将来使用该帐户登录其网站帐户.
  • 用户可以选择通过其他网站(登录"外部网站")(如Facebook连接,谷歌,四方,等..),这将使他使用的登录其帐户上的网站在未来.
  • 无论他选择哪种登录方式(本机帐户或外部网站帐户)并不重要,用户将能够在网站上使用外部网站(例如facebook,twitter,Instagram等)进行身份验证,以便使用他在外部网站上的数据(例如来自Twitter的推文,来自flickr的照片等),在网站上.

我该如何设计数据库的架构?

对于前两种情况,我认为有一个名为表Users有一个idtype领域.类型参考不同的表,例如FacebookUsersGoogleUsers,每个具有user_id场-其具有外国相对于Users.id场-和其他领域,如first_name,profile_picture等.

但这种方法不支持第三种情况.所以我想到了以下内容:为每个外部站点设置
一个名为table Users和table 的基表,我希望允许用户连接到我的站点(即站点). 该表将包含有关用户的基本信息(例如- 所有可选),其中包含一个名称将保存值的列,或者这些值的序列化数组. 的外部站点小号表(例如)将持有的相关数据为外部站点与用户相关的,并以一个参考表" 字段.
Usersfirst name, last name, username, password, emailaccountsnative|facebook|twitter
FlickrUsersUsersuser_id

当用户将其帐户与外部站点(例如flickr,instagram)连接时,我使用该 …

mysql schema database-design database-schema

6
推荐指数
1
解决办法
1338
查看次数

将用户筛选的查询参数存储在数据库表中的最佳方法是什么?

我有一个ASP.NET MVC网站.在我的后端,我有一个名为People以下列的表:

  1. ID
  2. 名称
  3. 年龄
  4. 地点
  5. ......(其他一些小组)

我有一个通用的网页,使用模型绑定来查询这些数据.这是我的控制器动作:

public ActionResult GetData(FilterParams filterParams)
{
      return View(_dataAccess.Retrieve(filterParams.Name, filterParams.Age, filterParams.location, . . .)
}
Run Code Online (Sandbox Code Playgroud)

映射到这样的东西:

 http://www.mysite.com/MyController/GetData?Name=Bill .. . 
Run Code Online (Sandbox Code Playgroud)

dataAccess层只是检查每个参数以查看它是否已填充以添加到db where子句.这非常有效.

我现在希望能够存储用户的过滤查询,我试图找出存储特定过滤器的最佳方法.由于某些过滤器在queryString中只有一个参数,而其他过滤器在过滤器中有10个以上的字段,因此我无法找到将此查询"过滤信息"存储到我的数据库中的最优雅方法.

我能想到的选择是:

  1. 有一个完整的表复制(有一些额外的cols),但称之为PeopleFilterQueries并在每个记录中填充一个FilterName并将过滤器的值放在每个字段(名称等)中

  2. 存储一个只有FilterName的表和一个字符串,我存储实际的查询字符串Name = Bill&Location = NewYork.这样,如果过滤器更改或增长,我将不必继续添加新列.

这种情况的最佳做法是什么?

asp.net-mvc database-design database-schema query-string

6
推荐指数
1
解决办法
2680
查看次数

重复的postgresql架构,包括序列

我的数据库布局需要为每个新客户创建新架构.目前我使用我在网上找到的内部功能并进行了一些修改.

CREATE FUNCTION copy_schema(
    source_schema character varying, 
    target_schema character varying, 
    copy_data boolean)
RETURNS integer AS
$BODY$
DECLARE
    t_ex integer := 0;
    s_ex integer := 0;
    src_table character varying;
    trg_table character varying;
BEGIN
    if (select 1 from pg_namespace where nspname = source_schema) THEN
        -- we have defined target schema
        s_ex := 1;
    END IF;

    IF (s_ex = 0) THEN
        -- no source schema exist
        RETURN 0;
    END IF;

    if (select 1 from pg_namespace where nspname = target_schema) THEN
        -- we have …
Run Code Online (Sandbox Code Playgroud)

sql postgresql multi-tenant database-schema

6
推荐指数
2
解决办法
4756
查看次数

数据库设计ManyToMany,OneToMany,ManyToOne,Django模型

对于具有特定关系的Django应用程序,我感到困惑.我一直在查看以下数据库模式:http://www.databaseanswers.org/data%5Fmodels/customers_and_orders/index.htm

我对Customer_addresses与Customers和Addresses之间的关系感到困惑.

我知道:

  • 一个客户可以拥有多个地址.
  • 许多客户可以拥有相同的(一个)地址

这是否等同于多对多的关系?

  • 很多客户可以拥有多个地址?

当我在django中构建模型时,我有(简化):

class Customer_Address(models.Model):
    customer = models.ManyToManyField('inventory.Customer')
    address = models.ManyToManyField('inventory.Address')
Run Code Online (Sandbox Code Playgroud)

这是正确的吗?或者这更有意义:

class Customer_Address(models.Model):
    customer = models.ForeignKeyField('inventory.Customer')
    address = models.ManyToManyField('inventory.Address')
Run Code Online (Sandbox Code Playgroud)

更新的问题:

基于这种想法,它是一个多对多的关系.有一个ManyToMany关系,需要两个ManyToManyFields吗?

基于以下内容:http: //en.wikipedia.org/wiki/Many-to-many_%28data_model%29

由于Django支持ManyToManyFields,我甚至不需要联结表吗?如果我使用联结表(Customer_addresses),文章似乎暗示使用两个OneToMany关系,这不仅仅是这样的两个外键?

class Customer_Address(models.Model):
    customer = models.ForeignKeyField('inventory.Customer')
    address = models.ForgeinKeyField('inventory.Address')
Run Code Online (Sandbox Code Playgroud)

更新的问题:

现在我们知道Django构建了中间表,并且不需要表Customer_Addresses.哪个表应该有ManyToManyfield?客户表?还是地址表?

示例:https://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany

在Person/Groups示例中.. Groups具有ManyToManyField.是否有任何原因无法在Person表中定义ManyToManyfield?

django-models database-schema

6
推荐指数
1
解决办法
4078
查看次数

在视图上授予选择权

在某个地方出现问题,我似乎无法找出原因.如果这已经被要求道歉.

我的数据库中有3个模式:COLLDESK LOCAL_IT GERBEN

COLLDESK是我们的主要模式,LOCAL_IT是我们进行本地开发的地方,而GERBEN是最终用户(应该只有选择选项).

现在我的COLLDESK模式中有一个名为GESTIONES的表.在LOCAL_IT中,我有一个名为ACTIONS的视图.这将保留COLLDESK模式中GESTIONES表中的4列.到现在为止还挺好!

现在我想在视图ACTIONS中给出GERBEN模式选择权限.但是,当我说

grant select on LOCAL_IT.ACTIONS to GERBEN
Run Code Online (Sandbox Code Playgroud)

我收到错误ORA-01720:COLLDESK.GESTIONES不存在授予选项

现在我尝试向GESTIONES提供GERBEN select权限,但我仍然收到错误消息

任何帮助将不胜感激!

亲切的问候

oracle select grant database-schema

6
推荐指数
2
解决办法
6万
查看次数

MySQL Workbench中的列标志"G"是什么意思

请参见下图,但作为表编辑器的一部分,有列标志,如PK(主键),NN(非空)等.最后一个是'G' MySQL表编辑器图像

mysql database database-design mysql-workbench database-schema

6
推荐指数
1
解决办法
1539
查看次数

Visual Studio 2017中的SQL Server比较架构

我试图在同一台服务器上比较两个数据库的模式.

这两个数据库被命名为benchmarkdbbenchmarkdb_dev.

在Visual Studio 2017中,我转到工具> SQL Server>新架构比较...

从标有"选择源"和"选择目标"的下拉菜单(如下图所示),我想选择benchmarkdb作为源和bencmarkdb_dev目标.

在此输入图像描述

单击选择源后,弹出"选择源模式",然后单击"选择连接..."按钮,这会弹出另一个弹出窗口.最新的弹出窗口(下图中右侧的弹出窗口)显示了我想要比较的两个数据库.

在此输入图像描述

但是,在我为源或目标选择一个之后,所有弹出窗口关闭,但没有任何内容填充"选择源..."或"选择目标..."下拉菜单.事实上,它只是回到第一张图片.

有没有解决方案,所以我可以比较数据库之间的模式?

更新:

我在VS 2012,2015和2017上尝试了这一点.所有人都面临同样的问题.VS软件和系统软件是最新的.以下是我正在使用的某些版本的软件,如果有任何帮助的话.

Windows 7企业版SP1

VS 2012,2015和2017

SQL Server 2014

.NET Framework v4.7.02053

sql-server database-schema schema-compare visual-studio-2017

6
推荐指数
2
解决办法
2万
查看次数

使用 SQLAlchemy 反映 postgres 数据库中的每个模式

我有一个现有的数据库,它有两个模式,命名为schoolsstudents,包含在一个实例中,declarative_base并通过从该实例继承的两个不同类

class DirectorioEstablecimiento(Base):
    __table_args__ = {'schema': 'schools'}
    __tablename__ = 'addresses'
    # some Columns are defined here
Run Code Online (Sandbox Code Playgroud)

class Matricula(Base):
    __table_args__ = {'schema': 'students'}
    __tablename__ = 'enrollments'
    # some Columns are defined here
Run Code Online (Sandbox Code Playgroud)

我可以使用该Base实例Base.metadata.create_all(bind=engine)在我在 postgres 中拥有的测试数据库中重新创建它。如果我查询,我可以确认这是没有问题的pg_namespace

In [111]: engine.execute("SELECT * FROM pg_namespace").fetchall()
2017-12-13 18:04:01,006 INFO sqlalchemy.engine.base.Engine SELECT * FROM pg_namespace
2017-12-13 18:04:01,006 INFO sqlalchemy.engine.base.Engine {}

Out[111]: 
[('pg_toast', 10, None),
 ('pg_temp_1', 10, None),
 ('pg_toast_temp_1', 10, None),
 ('pg_catalog', 10, '{postgres=UC/postgres,=U/postgres}'),
 ('public', 10, …
Run Code Online (Sandbox Code Playgroud)

python postgresql sqlalchemy database-schema

6
推荐指数
1
解决办法
1693
查看次数