1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-12-27 07:50:57 +01:00

Update database.schema doc to include how to upgrade the schema

Summary: plus update the phid section a little

Test Plan: read it, looked good.

Reviewers: epriestley

Reviewed By: epriestley

CC: aran, Korvin

Maniphest Tasks: T1287

Differential Revision: https://secure.phabricator.com/D3629
This commit is contained in:
Bob Trahan 2012-10-04 15:26:16 -07:00
parent 5bde6c71ce
commit 689c98c47c

View file

@ -103,7 +103,7 @@ no inconsistencies can arise. It will just slow us down.
Each globally referencable object in Phabricator has its associated PHID
(Phabricator ID) which serves as a global identifier. We use PHIDs for
referencing data in different databases. PHIDs are stored in table `phid`.
referencing data in different databases.
We use both autoincrementing IDs and global PHIDs because each is useful in
different contexts. Autoincrementing IDs are chronologically ordered and allow
@ -111,6 +111,12 @@ us to construct short, human-readable object names (like D2258) and URIs. Global
PHIDs allow us to represent relationships between different types of objects in
a homogenous way.
For example, the concept of "subscribers" is more powerfully done with PHIDs
because we could theoretically have users, projects, teams, and more all
as "subscribers" of other objects. Using an ID column we would need to add a
"type" column to avoid ID collision; using PHIDs does not require this
additional column.
= Transactions =
Transactional code should be written using transactions. Example of such code is
@ -131,6 +137,25 @@ systems (which we don't support anyway).
Phabricator uses schema denormalization for performance reasons sparingly. Try
to avoid it if possible.
= Changing the Schema =
There are three simple steps to update the schema:
- Create a `.sql` file in `resources/sql/patches/`. This file should:
- Contain the approprate MySQL commands to update the schema.
- Use `${NAMESPACE}` rather than `Phabricator` for database and table names.
- Use `COLLATE utf8_bin` for any columns that are to be used as identifiers,
such as PHID columns. Otherwise, use `COLLATE utf8_general_ci`.
- Edit `src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php` and
add your patch to @{method@phabricator:PhabricatorBuiltinPatchList::getPatches}.
- Run `bin/storage/upgrade`.
See the
[[https://secure.phabricator.com/rPb39175342dc5bee0c2246b05fa277e76a7e96ed3
| commit adding policy storage for Paste ]] for a reasonable example of the code
changes.
= See Also =
* @{class:LiskDAO}
* @{class:PhabricatorPHID}