我正在开发一个在线数据库建模器,用户可以在其中:
功能包括:
我想最初支持MSSql,MySQL,Postgres和SQLite。我想在Postgres中创建这个数据库。我有很少的Postgres经验,我主要处理的是MySQL。
这是我到目前为止所得到的:
id int( pk )
name varchar(40)
引擎的示例数据:
(
{"id":1,"name":"postgres"},
{"id":2, "name":"mysql"}
)
id int ( pk )
name varchar(100)
slug varchar(40)
user_id int
description text
engine int ( fk to engines.id )
fork_id int ( keep track of forks )
parent_id int ( this is for revisions )
comment_id int ( fk to comments.id )
created timestamptz(6)
modified timestamptz(6)
数据库的样本数据:
(
{
"id":1,"name":"my first db",
"slug":"my-first-db",
"user_id":3,
"description":"This is my first database.",
"engine":1,
"created":"2009-09-01 22:22:10",
"modified":"2009-09-01 22:22:10",
"comments":3
}
)
id int ( pk )
database_id int ( fk to databases.id )
name varchar(40)
x_position int // this is the X position from the top left of the container
y_position int // this is the Y position from the top left of the container
表的样本数据:
(
{"id":1,"name":"customers", "database_id":1, "x_position":1, "y_position":2 }
)
id int ( pk )
table_id int ( fk to tables.id )
name varchar(40)
type int ( fk to types.id )
default varchar ( 100 )
size int
autoincrement tinyint(1)
null tinyint(1)
字段的示例数据:
(
{"id":1,"name":"id", "type":2, "table_id":1, "autoincrement":1, "null":1 }
)
id int ( pk )
origin_field_id int ( fk to fields.id )
remote_field_id int ( fk to fields.id )
外键的示例数据:
(
{"id":1,"origin_field_id":2, "remote_field_id":3 }
)
id int ( pk )
name varchar(40)
外键的示例数据:
(
{"id":1,"name":"BLOB" }
)
id int ( pk )
type_id int
engine_id int
外键的示例数据:
(
{"id":1,"name":"BLOB" }
)
由于我是一个相对新手的SQLer,如果有人能够指出我所提出的关键设计缺陷并指出我没有想过的事情并且没有预见到可能是关键的话,我将不胜感激。以下是我需要解决的问题。
fork_id
和parent_id
。我想跟踪数据库是否与其他数据库分开,另外以保持对数据库的修订。为了做到这一点,我是否需要这两个?我意识到有一些我不支持的高级功能,例如视图/触发器,但我认为这在其简单的性质中很有用。
答案 0 :(得分:2)
如果您希望开发人员(创建数据库的人)能够使用SQL的所有功能和设施,那将无法工作。你完全是错误的方式。你做了大量的工作,设计表等等,必须承认;但这一切都是不必要的,但这种投资可能会阻碍你放弃它。当然,如果你实施了这种结构,有人必须(a)管理它并(b)维护它。
只要你有一个ANSI SQL平台,开发人员的这些设施就已经完整地提供,并且已经完全提供给已发布的标准(而不是你或我认为这是一种很好的供应方式,控制方法,以及测试,共享对象)。请不要重新发明轮子。
为自由,轻松,不受限制的学习区域;这是您的大部分要求:
在测试任何共享对象将协同工作之前,需要稍微受限制(比免费和简单)环境。这是一个单独的共享数据库,您可以创建和管理该数据库(或者,只有一个,只有一个,开发人员获得DBA认证)。
授予每个用户Create_Table(Rule,Proc等)权限
他们可以根据自己的心愿管理自己的对象,分享它们等。
每个对象所有者负责构建对象,共享对象,并在其所有者区域中对其进行测试。在开始正式对象开发之前,这仍然不是与正式测试相关的单一共享区域
用于实际测试的单个共享区域是DBO
作为DBA,您只需要管理DBO对象
这就是全部。管理所需的所有表等已经实现。它是SQL目录。
当然,有许多开发人员和DBA工具,只需点击几下即可完成上述任务。
答案 1 :(得分:0)
查找元数据管理工具和/或ERWin或其他数据库设计工具