schema.xml 4.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
  2. <database name="bookstore_namespaced" defaultIdMethod="native"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:noNamespaceSchemaLocation="../../../generator/resources/xsd/database.xsd">
  5. <table name="book" description="Book Table" phpName="NamespacedBook" namespace="Foo\Bar">
  6. <column name="id" required="true" primaryKey="true" autoIncrement="true" type="INTEGER" description="Book Id" />
  7. <column name="title" type="VARCHAR" required="true" description="Book Title" primaryString="true" />
  8. <column name="isbn" required="true" type="VARCHAR" size="24" phpName="ISBN" description="ISBN Number" />
  9. <column name="price" required="false" type="FLOAT" description="Price of the book." />
  10. <column name="publisher_id" required="false" type="INTEGER" description="Foreign Key Publisher" />
  11. <column name="author_id" required="false" type="INTEGER" description="Foreign Key Author" />
  12. <foreign-key foreignTable="publisher" onDelete="setnull">
  13. <reference local="publisher_id" foreign="id" />
  14. </foreign-key>
  15. <foreign-key foreignTable="author" onDelete="setnull" onUpdate="cascade">
  16. <reference local="author_id" foreign="id" />
  17. </foreign-key>
  18. <validator column="title" translate="none">
  19. <rule name="unique" message="Book title already in database." />
  20. <rule name="minLength" value="10" message="Book title must be more than ${value} characters long." />
  21. <rule name="maxLength" value="255" message="Book title must not be longer than ${value} characters." />
  22. </validator>
  23. <validator column="isbn" translate="none">
  24. <rule name="class" class="bookstore.validator.ISBNValidator" message="ISBN does not validate!"/>
  25. </validator>
  26. </table>
  27. <table name="publisher" description="Publisher Table" phpName="NamespacedPublisher" namespace="Baz">
  28. <column name="id" required="true" primaryKey="true" autoIncrement="true" type="INTEGER" description="Publisher Id" />
  29. <column name="name" required="true" type="VARCHAR" size="128" default="Penguin" description="Publisher Name" />
  30. </table>
  31. <table name="author" description="Author Table" phpName="NamespacedAuthor">
  32. <column name="id" required="true" primaryKey="true" autoIncrement="true" type="INTEGER" description="Author Id" />
  33. <column name="first_name" required="true" type="VARCHAR" size="128" description="First Name" />
  34. <column name="last_name" required="true" type="VARCHAR" size="128" description="Last Name" />
  35. <column name="email" type="VARCHAR" size="128" description="E-Mail Address" />
  36. <column name="age" type="INTEGER" description="The authors age" />
  37. <validator column="last_name" translate="none">
  38. <rule name="required" message="The last name field is required." />
  39. </validator>
  40. <validator column="email" translate="none">
  41. <rule name="match" value="/^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9])+(\.[a-zA-Z0-9_-]+)+$/" message="Please enter a valid email address." />
  42. </validator>
  43. <validator column="age" translate="none">
  44. <rule name="minValue" value="0" message="Please enter a positive number." />
  45. <rule name="maxValue" value="100" message="Impressive age! Just kidding, hm?" />
  46. </validator>
  47. </table>
  48. <!-- test many-to-many relationships -->
  49. <table name="book_club_list" phpName="NamespacedBookClub" namespace="Baz">
  50. <column name="id" required="true" primaryKey="true" autoIncrement="true" type="INTEGER" />
  51. <column name="group_leader" required="true" type="VARCHAR" size="100" />
  52. <column name="theme" required="false" type="VARCHAR" size="50" />
  53. </table>
  54. <table name="book_x_list" phpName="NamespacedBookListRel" isCrossRef="true">
  55. <column name="book_id" primaryKey="true" type="INTEGER" />
  56. <column name="book_club_list_id" primaryKey="true" type="INTEGER" />
  57. <foreign-key foreignTable="book" onDelete="cascade">
  58. <reference local="book_id" foreign="id" />
  59. </foreign-key>
  60. <foreign-key foreignTable="book_club_list" onDelete="cascade">
  61. <reference local="book_club_list_id" foreign="id" />
  62. </foreign-key>
  63. </table>
  64. <!-- test self-referencing foreign keys and inheritance-->
  65. <table name="bookstore_employee" phpName="NamespacedBookstoreEmployee" namespace="Foo\Bar">
  66. <column name="id" type="INTEGER" primaryKey="true" autoIncrement="true" />
  67. <column name="class_key" type="INTEGER" required="true" default="0" inheritance="single">
  68. <inheritance key="0" class="NamespacedBookstoreEmployee" />
  69. <inheritance key="1" class="NamespacedBookstoreManager" extends="NamespacedBookstoreEmployee" />
  70. <inheritance key="2" class="NamespacedBookstoreCashier" extends="NamespacedBookstoreEmployee" />
  71. </column>
  72. <column name="name" type="VARCHAR" size="32" />
  73. <column name="job_title" type="VARCHAR" size="32" />
  74. <column name="supervisor_id" type="INTEGER" />
  75. <column name="photo" type="BLOB" lazyLoad="true" />
  76. <foreign-key foreignTable="bookstore_employee" phpName="Supervisor" refPhpName="Subordinate" onDelete="setnull">
  77. <reference local="supervisor_id" foreign="id" />
  78. </foreign-key>
  79. </table>
  80. </database>